validate_delta_options() {
mkdir testrepo
- ostree --repo=testrepo init --mode=bare-user
+ ostree_repo_init testrepo --mode=bare-user
ostree --repo=testrepo remote add --set=gpg-verify=false local file://${repo}
ostree --repo=${repo} static-delta generate $@ --from=${from} --to=${to}
ostree --repo=testrepo pull --require-static-deltas local ${branch}@${from}
#include "libglnx.h"
#include "ostree.h"
+#include "ostree-repo-private.h"
#include "otutil.h"
static gboolean
if (!options)
options = &default_opts;
+ /* If we're diffing versus a repo, and either of them have xattrs disabled,
+ * then disable for both.
+ */
+ OstreeRepo *repo;
+ if (OSTREE_IS_REPO_FILE (a))
+ repo = ostree_repo_file_get_repo ((OstreeRepoFile*)a);
+ else if (OSTREE_IS_REPO_FILE (b))
+ repo = ostree_repo_file_get_repo ((OstreeRepoFile*)b);
+ else
+ repo = NULL;
+ if (repo != NULL && repo->disable_xattrs)
+ flags |= OSTREE_DIFF_FLAGS_IGNORE_XATTRS;
+
if (a == NULL)
{
if (!diff_add_dir_recurse (b, added, cancellable, error))
ret_xattrs = modifier->xattr_callback (self, relpath, file_info,
modifier->xattr_user_data);
}
- else if (!(modifier && (modifier->flags & OSTREE_REPO_COMMIT_MODIFIER_FLAGS_SKIP_XATTRS) > 0))
+ else if (!(modifier && (modifier->flags & OSTREE_REPO_COMMIT_MODIFIER_FLAGS_SKIP_XATTRS) > 0)
+ && !self->disable_xattrs)
{
if (path && OSTREE_IS_REPO_FILE (path))
{
GError *writable_error;
gboolean in_transaction;
gboolean disable_fsync;
+ gboolean disable_xattrs;
guint zlib_compression_level;
GHashTable *loose_object_devino_hash;
GHashTable *updated_uncompressed_dirs;
if (fstatat (self->repo_dir_fd, remote->keyring, &stbuf, AT_SYMLINK_NOFOLLOW) == 0)
{
+ GLnxFileCopyFlags copyflags = self->disable_xattrs ? GLNX_FILE_COPY_NOXATTRS : 0;
if (!glnx_file_copy_at (self->repo_dir_fd, remote->keyring,
- &stbuf, target_temp_fd, "pubring.gpg", 0,
+ &stbuf, target_temp_fd, "pubring.gpg", copyflags,
cancellable, error))
{
g_prefix_error (error, "Unable to copy remote's keyring: ");
ostree_repo_set_disable_fsync (self, TRUE);
}
+ /* See https://github.com/ostreedev/ostree/issues/758 */
+ if (!ot_keyfile_get_boolean_with_default (self->config, "core", "disable-xattrs",
+ TRUE, &self->disable_xattrs, error))
+ return FALSE;
+
{ g_autofree char *tmp_expiry_seconds = NULL;
/* 86400 secs = one day */
if (out_xattrs)
{
- if (!glnx_fd_get_all_xattrs (fd, &ret_xattrs,
- cancellable, error))
+ if (self->disable_xattrs)
+ ret_xattrs = g_variant_ref_sink (g_variant_new_array (G_VARIANT_TYPE ("(ayay)"), NULL, 0));
+ else if (!glnx_fd_get_all_xattrs (fd, &ret_xattrs,
+ cancellable, error))
goto out;
}
else if (g_file_info_get_file_type (ret_file_info) == G_FILE_TYPE_SYMBOLIC_LINK
&& out_xattrs)
{
- if (!glnx_dfd_name_get_all_xattrs (self->objects_dir_fd, loose_path_buf,
- &ret_xattrs,
- cancellable, error))
+ if (self->disable_xattrs)
+ ret_xattrs = g_variant_ref_sink (g_variant_new_array (G_VARIANT_TYPE ("(ayay)"), NULL, 0));
+ else if (!glnx_dfd_name_get_all_xattrs (self->objects_dir_fd, loose_path_buf,
+ &ret_xattrs,
+ cancellable, error))
goto out;
}
}
}
}
-
+
if (!found)
{
if (self->parent_repo)
return ret;
}
+static GLnxFileCopyFlags
+sysroot_flags_to_copy_flags (GLnxFileCopyFlags defaults,
+ OstreeSysrootDebugFlags sysrootflags)
+{
+ if (sysrootflags & OSTREE_SYSROOT_DEBUG_NO_XATTRS)
+ defaults |= GLNX_FILE_COPY_NOXATTRS;
+ return defaults;
+}
+
/* Try a hardlink if we can, otherwise fall back to copying. Used
* right now for kernels/initramfs in /boot, where we can just
* hardlink if we're on the same partition.
const char *src_subpath,
int dest_dfd,
const char *dest_subpath,
+ OstreeSysrootDebugFlags flags,
GCancellable *cancellable,
GError **error)
{
{
if (errno == EMLINK || errno == EXDEV)
{
- return glnx_file_copy_at (src_dfd, src_subpath, NULL, dest_dfd, dest_subpath, 0,
+ return glnx_file_copy_at (src_dfd, src_subpath, NULL, dest_dfd, dest_subpath,
+ sysroot_flags_to_copy_flags (0, flags),
cancellable, error);
}
else
const char *src_name,
int src_dfd,
int dest_dfd,
+ OstreeSysrootDebugFlags flags,
GCancellable *cancellable,
GError **error)
{
/* Clone all xattrs first, so we get the SELinux security context
* right. This will allow other users access if they have ACLs, but
* oh well.
- */
- if (!glnx_dfd_name_get_all_xattrs (src_parent_dfd, src_name,
- &xattrs, cancellable, error))
- goto out;
- if (!glnx_fd_set_all_xattrs (dest_dfd, xattrs,
- cancellable, error))
- goto out;
+ */
+ if (!(flags & OSTREE_SYSROOT_DEBUG_NO_XATTRS))
+ {
+ if (!glnx_dfd_name_get_all_xattrs (src_parent_dfd, src_name,
+ &xattrs, cancellable, error))
+ goto out;
+ if (!glnx_fd_set_all_xattrs (dest_dfd, xattrs,
+ cancellable, error))
+ goto out;
+ }
if (fstat (src_dfd, &src_stbuf) != 0)
{
copy_dir_recurse (int src_parent_dfd,
int dest_parent_dfd,
const char *name,
+ OstreeSysrootDebugFlags flags,
GCancellable *cancellable,
GError **error)
{
return FALSE;
if (!dirfd_copy_attributes_and_xattrs (src_parent_dfd, name, src_dfd_iter.fd, dest_dfd,
- cancellable, error))
+ flags, cancellable, error))
return FALSE;
while (TRUE)
if (S_ISDIR (child_stbuf.st_mode))
{
if (!copy_dir_recurse (src_dfd_iter.fd, dest_dfd, dent->d_name,
- cancellable, error))
+ flags, cancellable, error))
return FALSE;
}
else
{
if (!glnx_file_copy_at (src_dfd_iter.fd, dent->d_name, &child_stbuf,
dest_dfd, dent->d_name,
- GLNX_FILE_COPY_OVERWRITE,
+ sysroot_flags_to_copy_flags (GLNX_FILE_COPY_OVERWRITE, flags),
cancellable, error))
return FALSE;
}
int new_etc_fd,
const char *path,
int *out_dfd,
+ OstreeSysrootDebugFlags flags,
GCancellable *cancellable,
GError **error)
{
if (strcmp (parent_path, ".") != 0)
{
if (!ensure_directory_from_template (orig_etc_fd, modified_etc_fd, new_etc_fd,
- parent_path, NULL, cancellable, error))
+ parent_path, NULL, flags, cancellable, error))
goto out;
/* Loop */
goto out;
if (!dirfd_copy_attributes_and_xattrs (modified_etc_fd, path, src_dfd, target_dfd,
- cancellable, error))
+ flags, cancellable, error))
goto out;
ret = TRUE;
int modified_etc_fd,
int new_etc_fd,
const char *path,
+ OstreeSysrootDebugFlags flags,
GCancellable *cancellable,
GError **error)
{
g_autofree char *parent = g_path_get_dirname (path);
if (!ensure_directory_from_template (orig_etc_fd, modified_etc_fd, new_etc_fd,
- parent, &dest_parent_dfd, cancellable, error))
+ parent, &dest_parent_dfd, flags, cancellable, error))
goto out;
}
else
if (S_ISDIR (modified_stbuf.st_mode))
{
- if (!copy_dir_recurse (modified_etc_fd, new_etc_fd, path,
+ if (!copy_dir_recurse (modified_etc_fd, new_etc_fd, path, flags,
cancellable, error))
goto out;
}
{
if (!glnx_file_copy_at (modified_etc_fd, path, &modified_stbuf,
new_etc_fd, path,
- GLNX_FILE_COPY_OVERWRITE,
+ sysroot_flags_to_copy_flags (GLNX_FILE_COPY_OVERWRITE, flags),
cancellable, error))
goto out;
}
merge_etc_changes (GFile *orig_etc,
GFile *modified_etc,
GFile *new_etc,
+ OstreeSysrootDebugFlags flags,
GCancellable *cancellable,
GError **error)
{
g_assert (path);
if (!copy_modified_config_file (orig_etc_fd, modified_etc_fd, new_etc_fd, path,
- cancellable, error))
+ flags, cancellable, error))
goto out;
}
for (i = 0; i < added->len; i++)
g_assert (path);
if (!copy_modified_config_file (orig_etc_fd, modified_etc_fd, new_etc_fd, path,
- cancellable, error))
+ flags, cancellable, error))
goto out;
}
/* TODO - set out labels as we copy files */
g_assert (!etc_exists);
if (!copy_dir_recurse (deployment_usr_dfd, deployment_dfd, "etc",
- cancellable, error))
+ sysroot->debug_flags, cancellable, error))
goto out;
/* Here, we initialize SELinux policy from the /usr/etc inside
if (source_etc_path)
{
- if (!merge_etc_changes (source_etc_pristine_path, source_etc_path, deployment_etc_path,
- cancellable, error))
+ if (!merge_etc_changes (source_etc_pristine_path, source_etc_path, deployment_etc_path,
+ sysroot->debug_flags, cancellable, error))
goto out;
}
}
if (!hardlink_or_copy_at (tree_boot_dfd, tree_kernel_name,
bootcsum_dfd, dest_kernel_name,
+ sysroot->debug_flags,
cancellable, error))
goto out;
}
}
if (!hardlink_or_copy_at (tree_boot_dfd, tree_initramfs_name,
bootcsum_dfd, dest_initramfs_name,
+ sysroot->debug_flags,
cancellable, error))
goto out;
}
typedef enum {
/* Don't flag deployments as immutable. */
- OSTREE_SYSROOT_DEBUG_MUTABLE_DEPLOYMENTS = 1 << 0
+ OSTREE_SYSROOT_DEBUG_MUTABLE_DEPLOYMENTS = 1 << 0,
+ /* See https://github.com/ostreedev/ostree/pull/759 */
+ OSTREE_SYSROOT_DEBUG_NO_XATTRS = 1 << 1,
} OstreeSysrootDebugFlags;
{
const GDebugKey keys[] = {
{ "mutable-deployments", OSTREE_SYSROOT_DEBUG_MUTABLE_DEPLOYMENTS },
+ { "no-xattrs", OSTREE_SYSROOT_DEBUG_NO_XATTRS },
};
- self->debug_flags = g_parse_debug_string (g_getenv("OSTREE_SYSROOT_DEBUG"),
+ self->debug_flags = g_parse_debug_string (g_getenv ("OSTREE_SYSROOT_DEBUG"),
keys, G_N_ELEMENTS (keys));
self->sysroot_fd = -1;
cd ${test_tmpdir}
mkdir repo2
-${CMD_PREFIX} ostree --repo=repo2 init
+ostree_repo_init repo2
${CMD_PREFIX} ostree --repo=repo2 pull-local repo
echo "ok local clone"
echo "ok repo-in-cwd"
rm test-repo -rf
-$OSTREE --repo=test-repo init --mode=bare-user
-$OSTREE --repo=test-repo init --mode=bare-user
+ostree_repo_init test-repo --mode=bare-user
+ostree_repo_init test-repo --mode=bare-user
rm test-repo -rf
echo "ok repo-init on existing repo"
cd ${test_tmpdir}
mkdir repo2
-${CMD_PREFIX} ostree --repo=repo2 init
+ostree_repo_init repo2
${CMD_PREFIX} ostree --repo=repo2 pull-local repo
echo "ok pull-local"
cd ${test_tmpdir}
rm -rf shadow-repo
mkdir shadow-repo
-${CMD_PREFIX} ostree --repo=shadow-repo init
+ostree_repo_init shadow-repo
${CMD_PREFIX} ostree --repo=shadow-repo config set core.parent $(pwd)/repo
rm -rf test2-checkout
parent_rev_test2=$(${CMD_PREFIX} ostree --repo=repo rev-parse test2)
cd ${test_tmpdir}
mkdir repo3
-${CMD_PREFIX} ostree --repo=repo3 init
+ostree_repo_init repo3
${CMD_PREFIX} ostree --repo=repo3 pull-local --remote=aremote repo test2
${CMD_PREFIX} ostree --repo=repo3 rev-parse aremote/test2
echo "ok pull-local with --remote arg"
cd ${test_tmpdir}
rm repo3 -rf
-${CMD_PREFIX} ostree --repo=repo3 init --mode=archive
+ostree_repo_init repo3 --mode=archive
${CMD_PREFIX} ostree --repo=repo3 pull-local --remote=aremote repo test2
rm repo3/refs/remotes -rf
mkdir repo3/refs/remotes
cd ${test_tmpdir}
rm repo2 -rf
mkdir repo2
-${CMD_PREFIX} ostree --repo=repo2 init
+ostree_repo_init repo2
${CMD_PREFIX} ostree --repo=repo2 pull-local repo
${CMD_PREFIX} ostree --repo=repo2 show --print-detached-metadata-key=SIGNATURE test2 > test2-meta
assert_file_has_content test2-meta "HANCOCK"
cd ${test_tmpdir}
rm repo2 -rf
mkdir repo2
-${CMD_PREFIX} ostree --repo=repo2 init --mode=archive
+ostree_repo_init repo2 --mode=archive
${CMD_PREFIX} ostree --repo=repo2 pull-local repo
rm -rf test2-checkout
${CMD_PREFIX} ostree --repo=repo2 checkout -U --disable-cache test2 test2-checkout
#include "config.h"
#include <stdlib.h>
#include <string.h>
+#include <linux/magic.h>
+#include <sys/vfs.h>
#include "libglnx.h"
#include "libostreetest.h"
gboolean ret = FALSE;
g_autoptr(GFile) sysroot_path = g_file_new_for_path ("sysroot");
glnx_unref_object OstreeSysroot *ret_sysroot = NULL;
+ struct statfs stbuf;
if (!ot_test_run_libtest ("setup_os_repository \"archive-z2\" \"syslinux\"", error))
goto out;
- /* Make sure deployments are mutable */
- g_setenv ("OSTREE_SYSROOT_DEBUG", "mutable-deployments", TRUE);
+ { g_autoptr(GString) buf = g_string_new ("mutable-deployments");
+ if (statfs ("/", &stbuf) < 0)
+ return glnx_throw_errno (error), NULL;
+ /* Keep this in sync with the overlayfs bits in libtest.sh */
+#ifndef OVERLAYFS_SUPER_MAGIC
+#define OVERLAYFS_SUPER_MAGIC 0x794c7630
+#endif
+ if (stbuf.f_type == OVERLAYFS_SUPER_MAGIC)
+ {
+ g_print ("libostreetest: detected overlayfs\n");
+ g_string_append (buf, ",no-xattrs");
+ }
+ /* Make sure deployments are mutable */
+ g_setenv ("OSTREE_SYSROOT_DEBUG", buf->str, TRUE);
+ }
ret_sysroot = ostree_sysroot_new (sysroot_path);
export TEST_GPG_KEYHOME=${test_tmpdir}/gpghome
export OSTREE_GPG_HOME=${test_tmpdir}/gpghome/trusted
+# See comment in ot-builtin-commit.c and https://github.com/ostreedev/ostree/issues/758
+# Also keep this in sync with the bits in libostreetest.c
+echo evaluating for overlayfs...
+case $(stat -f --printf '%T' /) in
+ overlayfs)
+ echo "overlayfs found; enabling OSTREE_NO_XATTRS"
+ export OSTREE_SYSROOT_DEBUG="${OSTREE_SYSROOT_DEBUG},no-xattrs"
+ export OSTREE_NO_XATTRS=1 ;;
+ *) ;;
+esac
+echo done
+
if test -n "${OT_TESTS_DEBUG:-}"; then
set -x
fi
oldpwd=`pwd`
cd ${test_tmpdir}
- mkdir repo
- cd repo
- ot_repo="--repo=`pwd`"
- export OSTREE="${CMD_PREFIX} ostree ${ot_repo}"
- if test -n "$mode"; then
- $OSTREE init --mode=${mode}
+ if test -n "${mode}"; then
+ ostree_repo_init repo --mode=${mode}
else
- $OSTREE init
+ ostree_repo_init repo
fi
+ ot_repo="--repo=$(pwd)/repo"
+ export OSTREE="${CMD_PREFIX} ostree ${ot_repo}"
cd ${test_tmpdir}
mkdir files
cd $oldpwd
}
+# A wrapper which also possibly disables xattrs for CI testing
+ostree_repo_init() {
+ repo=$1
+ shift
+ ${CMD_PREFIX} ostree --repo=${repo} init "$@"
+ if test -n "${OSTREE_NO_XATTRS:-}"; then
+ echo -e 'disable-xattrs=true\n' >> ${repo}/config
+ fi
+}
+
setup_fake_remote_repo1() {
mode=$1
commit_opts=${2:-}
mkdir ostree-srv
cd ostree-srv
mkdir gnomerepo
- ${CMD_PREFIX} ostree --repo=gnomerepo init --mode=$mode
+ ostree_repo_init gnomerepo --mode=$mode
mkdir gnomerepo-files
cd gnomerepo-files
echo first > firstfile
mkdir -p ostree-srv/exampleos/{repo,build-repo}
export ORIGIN_REPO=ostree-srv/exampleos/repo
export ORIGIN_BUILD_REPO=ostree-srv/exampleos/build-repo
- ${CMD_PREFIX} ostree --repo=${ORIGIN_REPO} init --mode=archive
- ${CMD_PREFIX} ostree --repo=${ORIGIN_BUILD_REPO} init --mode=bare-user
+ ostree_repo_init ${ORIGIN_REPO} --mode=archive
+ ostree_repo_init ${ORIGIN_BUILD_REPO} --mode=bare-user
cd ${test_tmpdir}
rm main -rf
mkdir main
cd ${test_tmpdir}
rm repo -rf
- ${CMD_PREFIX} ostree --repo=repo init --mode=bare-user
+ ostree_repo_init repo --mode=bare-user
${CMD_PREFIX} ostree --repo=repo remote add --set=gpg-verify=false origin $(cat ostree-srv/httpd/address)/exampleos/repo
export OSTREE="${CMD_PREFIX} ostree --repo=repo"
}
cd ${test_tmpdir}
mkdir testos-repo
if test -n "$mode"; then
- ${CMD_PREFIX} ostree --repo=testos-repo init --mode=${mode}
+ ostree_repo_init testos-repo --mode=${mode}
else
- ${CMD_PREFIX} ostree --repo=testos-repo init
+ ostree_repo_init testos-repo
fi
cd ${test_tmpdir}
cd ${test_tmpdir}
rm repo -rf
mkdir repo
- ${CMD_PREFIX} ostree --repo=repo init
+ ostree_repo_init repo
${CMD_PREFIX} ostree --repo=repo remote add --set=gpg-verify=false origin $(cat httpd-address)/ostree/gnomerepo
}
cd ${test_tmpdir}
mkdir mirrorrepo
-${CMD_PREFIX} ostree --repo=mirrorrepo init --mode=archive-z2
+ostree_repo_init mirrorrepo --mode=archive-z2
${CMD_PREFIX} ostree --repo=mirrorrepo remote add --set=gpg-verify=false origin $(cat httpd-address)/ostree/gnomerepo
${CMD_PREFIX} ostree --repo=mirrorrepo pull --mirror origin main
${CMD_PREFIX} ostree --repo=mirrorrepo fsck
cd ${test_tmpdir}
mkdir mirrorrepo-local
-${CMD_PREFIX} ostree --repo=mirrorrepo-local init --mode=archive-z2
+ostree_repo_init mirrorrepo-local --mode=archive-z2
${CMD_PREFIX} ostree --repo=mirrorrepo-local remote add --set=gpg-verify=false origin file://$(pwd)/ostree-srv/gnomerepo
${CMD_PREFIX} ostree --repo=mirrorrepo-local pull --mirror origin main
${CMD_PREFIX} ostree --repo=mirrorrepo-local fsck
cd ${test_tmpdir}
mkdir parentpullrepo
-${CMD_PREFIX} ostree --repo=parentpullrepo init --mode=archive-z2
+ostree_repo_init parentpullrepo --mode=archive-z2
${CMD_PREFIX} ostree --repo=parentpullrepo remote add --set=gpg-verify=false origin file://$(pwd)/ostree-srv/gnomerepo
parent_rev=$(ostree --repo=ostree-srv/gnomerepo rev-parse main^)
rev=$(ostree --repo=ostree-srv/gnomerepo rev-parse main)
cd ${test_tmpdir}
mkdir repo2
-${CMD_PREFIX} ostree --repo=repo2 init
+ostree_repo_init repo2
${CMD_PREFIX} ostree --repo=repo2 remote add --set=gpg-verify=false aremote file://$(pwd)/repo test2
${CMD_PREFIX} ostree --repo=repo2 pull aremote
${CMD_PREFIX} ostree --repo=repo2 rev-parse aremote/test2
mkdir ostree-srv
cd ostree-srv
mkdir gnomerepo
-${CMD_PREFIX} ostree --repo=gnomerepo init --mode="archive-z2"
+ostree_repo_init gnomerepo --mode="archive-z2"
mkdir gnomerepo-files
cd gnomerepo-files
echo first > firstfile
# Set OSTREE_GPG_HOME to a place with no keyrings, we shouldn't trust the signature
cd ${test_tmpdir}
mkdir repo
-${CMD_PREFIX} ostree --repo=repo init
+ostree_repo_init repo
${CMD_PREFIX} ostree --repo=repo remote add origin $(cat httpd-address)/ostree/gnomerepo
if env OSTREE_GPG_HOME=${test_tmpdir} ${CMD_PREFIX} ostree --repo=repo pull origin main; then
assert_not_reached "pull with no trusted GPG keys unexpectedly succeeded!"
# And a test case with valid signature
cd ${test_tmpdir}
mkdir repo
-${CMD_PREFIX} ostree --repo=repo init
+ostree_repo_init repo
${CMD_PREFIX} ostree --repo=repo remote add origin $(cat httpd-address)/ostree/gnomerepo
${CMD_PREFIX} ostree --repo=repo pull origin main
${CMD_PREFIX} ostree --repo=repo show --gpg-verify-remote=origin main | grep -o 'Found [[:digit:]] signature' > show-verify-remote
echo borkborkbork > ${fname};
done
mkdir repo
-${CMD_PREFIX} ostree --repo=repo init
+ostree_repo_init repo
${CMD_PREFIX} ostree --repo=repo remote add origin $(cat httpd-address)/ostree/gnomerepo
if ${CMD_PREFIX} ostree --repo=repo pull origin main; then
assert_not_reached "pull with corrupted signature unexpectedly succeeded!"
# verification off
cd ${test_tmpdir}
mkdir repo
-${CMD_PREFIX} ostree --repo=repo init
+ostree_repo_init repo
${CMD_PREFIX} ostree --repo=repo remote add --set=gpg-verify=false origin $(cat httpd-address)/ostree/gnomerepo
${CMD_PREFIX} ostree --repo=repo pull origin main
rm repo -rf
${CMD_PREFIX} ostree --repo=${test_tmpdir}/ostree-srv/gnomerepo commit -b main -s "Don't forget to sign me!"
cd ${test_tmpdir}
mkdir repo
-${CMD_PREFIX} ostree --repo=repo init
+ostree_repo_init repo
${CMD_PREFIX} ostree --repo=repo remote add --set=gpg-verify=false origin $(cat httpd-address)/ostree/gnomerepo
${CMD_PREFIX} ostree --repo=repo pull origin main
if ${CMD_PREFIX} ostree --repo=repo show main | grep -o 'Found [[:digit:]] signature'; then
echo '1..12'
mkdir repo
-${CMD_PREFIX} ostree --repo=repo init --mode=archive-z2
+ostree_repo_init repo --mode=archive-z2
mkdir files
for bin in ${bindatafiles}; do
assert_not_reached "static-delta generate --from=${origrev} --empty unexpectedly succeeded"
fi
-${CMD_PREFIX} ostree --repo=temp-repo init --mode=archive
+ostree_repo_init temp-repo --mode=archive
${CMD_PREFIX} ostree --repo=temp-repo pull-local repo
${CMD_PREFIX} ostree --repo=temp-repo static-delta generate --empty --to=${newrev} --filename=some.delta
assert_has_file some.delta
${CMD_PREFIX} ostree --repo=repo summary -u
-mkdir repo2 && ${CMD_PREFIX} ostree --repo=repo2 init --mode=bare-user
+mkdir repo2 && ostree_repo_init repo2 --mode=bare-user
${CMD_PREFIX} ostree --repo=repo2 pull-local --require-static-deltas repo ${newrev}
${CMD_PREFIX} ostree --repo=repo2 fsck
${CMD_PREFIX} ostree --repo=repo2 ls ${newrev} >/dev/null
echo 'ok pull delta'
rm repo2 -rf
-mkdir repo2 && ${CMD_PREFIX} ostree --repo=repo2 init --mode=bare-user
+mkdir repo2 && ostree_repo_init repo2 --mode=bare-user
mkdir deltadir
deltaprefix=$(get_assert_one_direntry_matching repo/deltas '.')
assert_not_has_file repo/deltas/${deltaprefix}/${deltadir}/0
rm repo2 -rf
-mkdir repo2 && ostree --repo=repo2 init --mode=bare-user
+ostree_repo_init repo2 --mode=bare-user
${CMD_PREFIX} ostree --repo=repo2 pull-local repo ${origrev}
${CMD_PREFIX} ostree --repo=repo2 ls ${origrev} >/dev/null
${CMD_PREFIX} ostree --repo=repo summary -u
rm -rf repo2
-mkdir repo2 && ${CMD_PREFIX} ostree --repo=repo2 init --mode=bare-user
+mkdir repo2 && ostree_repo_init repo2 --mode=bare-user
${CMD_PREFIX} ostree --repo=repo2 pull-local repo ${newrev}
${CMD_PREFIX} ostree --repo=repo2 pull-local --require-static-deltas repo ${samerev}
${CMD_PREFIX} ostree --repo=repo2 fsck
packages="bash systemd"
mkdir build-repo
-${CMD_PREFIX} ostree --repo=build-repo init --mode=bare-user
+ostree_repo_init build-repo --mode=bare-user
mkdir repo
-${CMD_PREFIX} ostree --repo=repo init --mode=archive-z2
+ostree_repo_init repo --mode=archive-z2
# Our FUSE mount point
mkdir mnt
cd ${test_tmpdir}
mkdir repo2
-${CMD_PREFIX} ostree --repo=repo2 init --mode="archive-z2"
+ostree_repo_init repo2 --mode="archive-z2"
${CMD_PREFIX} ostree --repo=repo2 pull-local repo
find repo2/objects -name '*.commit' | wc -l > commitcount
cd ${test_tmpdir}
mkdir repo2
-${CMD_PREFIX} ostree --repo=repo2 init --mode="bare-user"
+ostree_repo_init repo2 --mode="bare-user"
${CMD_PREFIX} ostree --repo=repo2 pull-local repo
${CMD_PREFIX} ostree --repo=repo2 fsck
echo "ok pull-local z2 to bare-user"
mkdir repo3
-${CMD_PREFIX} ostree --repo=repo3 init --mode="archive-z2"
+ostree_repo_init repo3 --mode="archive-z2"
${CMD_PREFIX} ostree --repo=repo3 pull-local repo2
${CMD_PREFIX} ostree --repo=repo3 fsck
echo "ok pull-local bare-user to z2"
echo "ok checkouts same"
mkdir repo4
-${CMD_PREFIX} ostree --repo=repo4 init --mode="archive-z2"
+ostree_repo_init repo4 --mode="archive-z2"
${CMD_PREFIX} ostree --repo=repo4 remote add --gpg-import ${test_tmpdir}/gpghome/key1.asc origin repo
if ${CMD_PREFIX} ostree --repo=repo4 pull-local --remote=origin --gpg-verify repo test2 2>&1; then
assert_not_reached "GPG verification unexpectedly succeeded"
${OSTREE} gpg-sign --gpg-homedir=${TEST_GPG_KEYHOME} test2 ${TEST_GPG_KEYID_1}
mkdir repo5
-${CMD_PREFIX} ostree --repo=repo5 init --mode="archive-z2"
+ostree_repo_init repo5 --mode="archive-z2"
${CMD_PREFIX} ostree --repo=repo5 remote add --gpg-import ${test_tmpdir}/gpghome/key1.asc origin repo
${CMD_PREFIX} ostree --repo=repo5 pull-local --remote=origin --gpg-verify repo test2
echo "ok --gpg-verify"
mkdir repo6
-${CMD_PREFIX} ostree --repo=repo6 init --mode="archive-z2"
+ostree_repo_init repo6 --mode="archive-z2"
${CMD_PREFIX} ostree --repo=repo6 remote add --gpg-import ${test_tmpdir}/gpghome/key1.asc origin repo
if ${CMD_PREFIX} ostree --repo=repo6 pull-local --remote=origin --gpg-verify-summary repo test2 2>&1; then
assert_not_reached "GPG summary verification with no summary unexpectedly succeeded"
echo "ok --gpg-verify-summary"
mkdir repo7
-${CMD_PREFIX} ostree --repo=repo7 init --mode="archive-z2"
+ostree_repo_init repo7 --mode="archive-z2"
${CMD_PREFIX} ostree --repo=repo7 pull-local repo
${CMD_PREFIX} ostree --repo=repo7 fsck
for src_object in `find repo/objects -name '*.filez'`; do
cd ${test_tmpdir}
rm repo -rf
mkdir repo
-${CMD_PREFIX} ostree --repo=repo init
+ostree_repo_init repo
${CMD_PREFIX} ostree --repo=repo remote add --set=gpg-verify=false origin $(cat httpd-address)/ostree/gnomerepo
${CMD_PREFIX} ostree --repo=repo pull origin main --subpath /baz
cd ${test_tmpdir}
# Create a repo
-${CMD_PREFIX} ostree --repo=repo2 init
+ostree_repo_init repo2
${CMD_PREFIX} ostree --repo=repo2 remote add --gpg-import=${test_tmpdir}/gpghome/trusted/pubring.gpg --set=gpg-verify=true aremote file://$(pwd)/repo test2
# Create a repo with repo2 as parent
cd ${test_tmpdir}
mkdir repo
-${CMD_PREFIX} ostree --repo=repo init
+ostree_repo_init repo
${CMD_PREFIX} ostree --repo=repo remote add --set=gpg-verify=false origin $(cat httpd-address)/ostree/gnomerepo
mkdir -p tree/root
echo "ok prune"
rm repo -rf
-${CMD_PREFIX} ostree --repo=repo init --mode=bare-user
+ostree_repo_init repo --mode=bare-user
${CMD_PREFIX} ostree --repo=repo remote add --set=gpg-verify=false origin $(cat httpd-address)/ostree/gnomerepo
${CMD_PREFIX} ostree --repo=repo pull --depth=-1 --commit-metadata-only origin test
${CMD_PREFIX} ostree --repo=repo prune
cd ${test_tmpdir}
for repo in repo child-repo tmp-repo; do
rm ${repo} -rf
- ${CMD_PREFIX} ostree --repo=${repo} init --mode=archive
+ ostree_repo_init ${repo} --mode=archive
done
echo parent=${test_tmpdir}/repo >> child-repo/config
mkdir files
# would interact. We make a new repo test suite, then clone it
# for "subtests" below with reinitialize_datesnap_repo()
rm repo datetest-snapshot-repo -rf
-${CMD_PREFIX} ostree --repo=datetest-snapshot-repo init --mode=archive
+ostree_repo_init datetest-snapshot-repo --mode=archive
# Some ancient commits on the both a stable/dev branch
for day in $(seq 5); do
${CMD_PREFIX} ostree --repo=datetest-snapshot-repo commit --branch=stable -m test -s "old stable build $day" tree --timestamp="October $day 1985"
# Snapshot the above
reinitialize_datesnap_repo() {
rm repo -rf
- ${CMD_PREFIX} ostree --repo=repo init --mode=archive
+ ostree_repo_init repo --mode=archive
${CMD_PREFIX} ostree --repo=repo pull-local --depth=-1 datetest-snapshot-repo
}
cd ${test_tmpdir}
mkdir repo
-${CMD_PREFIX} ostree --repo=repo init
+ostree_repo_init repo
${CMD_PREFIX} ostree --repo=repo remote add --set=gpg-verify=false origin $(cat httpd-address)/ostree/gnomerepo
${CMD_PREFIX} ostree --repo=repo pull --commit-metadata-only origin main
cd ${test_tmpdir}
mkdir repo
-${CMD_PREFIX} ostree --repo=repo init
+ostree_repo_init repo
if has_gpgme; then VERIFY=true; else VERIFY=false; fi
${CMD_PREFIX} ostree --repo=repo remote add origin \
--set=gpg-verify=$VERIFY --set=gpg-verify-summary=$VERIFY \
cd ${test_tmpdir}
rm repo -rf
mkdir repo
- ${CMD_PREFIX} ostree --repo=repo init
+ ostree_repo_init repo
${CMD_PREFIX} ostree --repo=repo remote add --set=gpg-verify=false origin $(cat httpd-address)/ostree/gnomerepo
if ${CMD_PREFIX} ostree --repo=repo pull origin main; then
assert_not_reached "pull unexpectedly succeeded!"
cd ${test_tmpdir}
mkdir repo
-${CMD_PREFIX} ostree --repo=repo init
+ostree_repo_init repo
${CMD_PREFIX} ostree --repo=repo remote add --set=gpg-verify=false origin $(cat httpd-address)/ostree/gnomerepo
${CMD_PREFIX} ostree --repo=repo pull --depth=0 origin main
cd ${test_tmpdir}
mkdir repo
-${CMD_PREFIX} ostree --repo=repo init
+ostree_repo_init repo
${CMD_PREFIX} ostree --repo=repo remote add --set=gpg-verify=false origin $(cat httpd-address)/ostree/gnomerepo
if ${CMD_PREFIX} ostree --repo=repo pull origin main 2>pulllog.txt 1>&2; then
cd ${test_tmpdir}
mkdir repo
-${CMD_PREFIX} ostree --repo=repo init
+ostree_repo_init repo
${CMD_PREFIX} ostree --repo=repo remote add --set=gpg-verify=false origin metalink=$(cat metalink-httpd-address)/metalink.xml
${CMD_PREFIX} ostree --repo=repo pull origin:main
${CMD_PREFIX} ostree --repo=repo rev-parse origin:main
msg=$1
rm repo -rf
mkdir repo
- ${CMD_PREFIX} ostree --repo=repo init
+ ostree_repo_init repo
${CMD_PREFIX} ostree --repo=repo remote add --set=gpg-verify=false origin metalink=$(cat metalink-httpd-address)/metalink.xml
if ${CMD_PREFIX} ostree --repo=repo pull origin:main 2>err.txt; then
assert_not_reached "pull unexpectedly succeeded"
cd ${test_tmpdir}
rm repo -rf
mkdir repo
-${CMD_PREFIX} ostree --repo=repo init
+ostree_repo_init repo
${CMD_PREFIX} ostree --repo=repo remote add --set=gpg-verify=false origin metalink=$(cat metalink-httpd-address)/metalink.xml
${CMD_PREFIX} ostree --repo=repo pull origin:main
${CMD_PREFIX} ostree --repo=repo rev-parse origin:main
prev_dir=`pwd`
cd ${test_tmpdir}
-${CMD_PREFIX} ostree --repo=repo init --mode=archive-z2
+ostree_repo_init repo --mode=archive-z2
${CMD_PREFIX} ostree --repo=repo remote add --set=gpg-verify=false origin $(cat httpd-address)/ostree/gnomerepo
${CMD_PREFIX} ostree --repo=repo pull --mirror origin
assert_has_file repo/summary
cd ${test_tmpdir}
rm -rf repo
-mkdir repo
-${OSTREE} --repo=repo init --mode=archive-z2
+ostree_repo_init repo --mode=archive-z2
${OSTREE} --repo=repo remote add origin $(cat httpd-address)/ostree/gnomerepo
echo "ok pull mirror without checking signed summary"
cd ${test_tmpdir}
rm -rf repo
-mkdir repo
-${OSTREE} --repo=repo init --mode=archive-z2
+ostree_repo_init repo --mode=archive-z2
${OSTREE} --repo=repo remote add --set=gpg-verify-summary=true origin $(cat httpd-address)/ostree/gnomerepo
if ${OSTREE} --repo=repo pull --mirror origin 2>err.txt; then
assert_not_reached "Mirroring unexpectedly succeeded"
cd ${test_tmpdir}
rm -rf repo
-mkdir repo
-${OSTREE} --repo=repo init --mode=archive-z2
+ostree_repo_init repo --mode=archive-z2
${OSTREE} --repo=repo remote add --set=gpg-verify-summary=true origin $(cat httpd-address)/ostree/gnomerepo
${OSTREE} --repo=repo pull --mirror origin
assert_has_file repo/summary
cd ${test_tmpdir}
rm -rf repo
mkdir repo
-${OSTREE} --repo=repo init --mode=archive-z2
+ostree_repo_init repo --mode=archive-z2
${OSTREE} --repo=repo remote add origin $(cat httpd-address)/ostree/gnomerepo
${OSTREE} --repo=repo pull --mirror origin
assert_has_file repo/summary
cd ${test_tmpdir}
mkdir repo
-${CMD_PREFIX} ostree --repo=repo init
+ostree_repo_init repo
${CMD_PREFIX} ostree --repo=repo remote add origin --no-gpg-verify \
mirrorlist=$(cat httpd-address)/ostree/mirrorlist
${CMD_PREFIX} ostree --repo=repo pull origin:main
cd ${test_tmpdir}
rm -rf repo
mkdir repo
-${CMD_PREFIX} ostree --repo=repo init
+ostree_repo_init repo
${CMD_PREFIX} ostree --repo=repo remote add origin --no-gpg-verify \
--contenturl=mirrorlist=$(cat httpd-address)/ostree/mirrorlist \
$(cat httpd-address)/ostree/gnomerepo
cd ${test_tmpdir}
rm -rf repo
mkdir repo
-${CMD_PREFIX} ostree --repo=repo init
+ostree_repo_init repo
${CMD_PREFIX} ostree --repo=repo remote add origin --no-gpg-verify \
--contenturl=mirrorlist=$(cat httpd-address)/ostree/mirrorlist \
mirrorlist=$(cat httpd-address)/ostree/mirrorlist
mkdir mirror-srv
cd mirror-srv
mkdir gnomerepo
-${CMD_PREFIX} ostree --repo=gnomerepo init --mode "archive-z2"
+ostree_repo_init gnomerepo --mode "archive-z2"
${CMD_PREFIX} ostree --repo=gnomerepo remote add --set=gpg-verify=false origin ${gnomerepo_url}
${CMD_PREFIX} ostree --repo=gnomerepo pull --mirror --depth=-1 origin main
cd ${test_tmpdir}
mirrorrepo_url="$(cat mirror-httpd-address)/ostree/gnomerepo"
mkdir repo
-${CMD_PREFIX} ostree --repo=repo init
+ostree_repo_init repo
${CMD_PREFIX} ostree --repo=repo remote add --set=gpg-verify=false origin ${gnomerepo_url}
rm -rf ${test_tmpdir}/ostree-srv/gnomerepo
if ${CMD_PREFIX} ostree --repo=repo pull --depth=-1 origin main
setup_fake_remote_repo1 "archive-z2" "${COMMIT_SIGN}" --random-500s=50
cd ${test_tmpdir}
-${CMD_PREFIX} ostree --repo=repo init --mode=archive-z2
+ostree_repo_init repo --mode=archive-z2
${CMD_PREFIX} ostree --repo=repo remote add --set=gpg-verify=false origin $(cat httpd-address)/ostree/gnomerepo
for x in $(seq 200); do
if ${CMD_PREFIX} ostree --repo=repo pull --mirror origin main 2>err.txt; then
cd ${test_tmpdir}
rm repo -rf
mkdir repo
-${CMD_PREFIX} ostree --repo=repo init
+ostree_repo_init repo
${CMD_PREFIX} ostree --repo=repo remote add --set=gpg-verify=false origin $(cat httpd-address)/ostree/gnomerepo
maxtries=`find ${repopath}/objects | wc -l`
cd ${test_tmpdir}
rm repo -rf
mkdir repo
-${CMD_PREFIX} ostree --repo=repo init
+ostree_repo_init repo
${CMD_PREFIX} ostree --repo=repo remote add --set=gpg-verify=false origin ${remoteurl}
${CMD_PREFIX} ostree --repo=repo pull --subpath=/baz/deeper --subpath=/baz/another origin main
rm -rf repo
-${CMD_PREFIX} ostree --repo=repo init
+ostree_repo_init repo
${CMD_PREFIX} ostree --repo=repo remote add --set=gpg-verify=false origin ${remoteurl}
# Pull a directory which is not the first in the commit (/baz/another is before)
prev_dir=`pwd`
cd ${test_tmpdir}
-${CMD_PREFIX} ostree --repo=repo init --mode=archive-z2
+ostree_repo_init repo --mode=archive-z2
${CMD_PREFIX} ostree --repo=repo remote add --set=gpg-verify=false origin $(cat httpd-address)/ostree/gnomerepo
${CMD_PREFIX} ostree --repo=repo pull --mirror origin
assert_has_file repo/summary
cd ${test_tmpdir}
rm -rf repo
mkdir repo
- ${OSTREE} --repo=repo init --mode=archive-z2
+ ostree_repo_init repo --mode=archive-z2
${OSTREE} --repo=repo remote add --set=gpg-verify-summary=true origin $(cat httpd-address)/ostree/gnomerepo
}
cd ${test_tmpdir}
mkdir repo2
-${CMD_PREFIX} ostree --repo=repo2 init --mode="bare"
+ostree_repo_init repo2 --mode="bare"
${CMD_PREFIX} ostree --repo=repo2 --untrusted pull-local repo
rm -rf repo2
mkdir repo2
-${CMD_PREFIX} ostree --repo=repo2 init --mode="bare"
+ostree_repo_init repo2 --mode="bare"
if ${CMD_PREFIX} ostree --repo=repo2 pull-local repo; then
echo "ok trusted pull with corruption succeeded"
else
rm -rf repo2
mkdir repo2
-${CMD_PREFIX} ostree --repo=repo2 init --mode="bare"
+ostree_repo_init repo2 --mode="bare"
if ${CMD_PREFIX} ostree --repo=repo2 pull-local --untrusted repo; then
assert_not_reached "corrupted untrusted pull unexpectedly failed!"
else
cd ${test_tmpdir}
mkdir repo
-${CMD_PREFIX} ostree --repo=repo init
+ostree_repo_init repo
mkdir -p tree/root
touch tree/root/a
cd ${test_tmpdir}
rm repo -rf
mkdir repo
-${CMD_PREFIX} ostree --repo=repo init
+ostree_repo_init repo
${CMD_PREFIX} ostree --repo=repo remote add --set=gpg-verify=false origin $(cat httpd-address)/ostree/gnomerepo
# Sanity check the setup, without cookies the pull should fail
cd ${test_tmpdir}
rm repo -rf
mkdir repo
-${CMD_PREFIX} ostree --repo=repo init
+ostree_repo_init repo
${CMD_PREFIX} ostree --repo=repo remote add --set=gpg-verify=false origin $(cat httpd-address)/ostree/gnomerepo
# Sanity check the setup, without headers the pull should fail
. $(dirname $0)/libtest.sh
+skip "We don't really have a use case for committing user. xattrs right now. See also https://github.com/ostreedev/ostree/issues/758"
+
+# Dead code below
skip_without_user_xattrs
echo "1..2"